package cn.tedu.charging.order.rabbitmq;

import cn.tedu.charging.order.config.RabbitMQConfig;
import cn.tedu.charging.order.pojo.po.OrderMQPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

//静态导入      侯亚强说不重要，就是下面直接写ORDER_ROUTING_KEY时，可以导包，但通常下面都是写全名，知道从哪儿来的，所以一般不这样导包
import static cn.tedu.charging.order.config.RabbitMQConfig.ORDER_ROUTING_KEY;

@Slf4j
@Component
public class RabbitMQOrderProducer {

    @Autowired  //RabbitMQ依赖有的
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送消息到正常的订单队列
     * 正常的订单队列,没有消费者        ??那正常订单，用MQ一直发队列信息干啥？？不是为了监测心跳，让桩消费然后给存活反馈？？
     * 消息设置了生存时间
     * 消息过期后,超过了生存时间,消息会转发到死信队列
     * @param orderMQPO
     */
    //public void sendOrder(String message) {
    public void sendOrder(OrderMQPO orderMQPO) {  //order第6步sendOrderMessage里用OrderMQPO传递信息
        //转换和发送     把参数传给配置类的正常交换机、正常routingKey
        //rabbitTemplate.convertAndSend(RabbitMQConfig.ORDER_EXCHANGE, RabbitMQConfig.ORDER_ROUTING_KEY,message);
        rabbitTemplate.convertAndSend(RabbitMQConfig.ORDER_EXCHANGE, RabbitMQConfig.ORDER_ROUTING_KEY,orderMQPO);
        //查看这方法的源码一直往下看，大概就是把消息orderMQPO发送给这个交换机、routingKey？？
        // 然后超时后这个队列中的消息消失，但消失前将参数传给死信交换机、rootingkey
    }

}


